#include <QApplication>
#include <QWidget>
#include <QDebug>

class MyWidget : public QWidget
{
    //Q_OBJECT是一个宏，添加它才能正常使用Qt的信号和槽机制
    Q_OBJECT

//信号函数
signals:
    void MySignal(QString mess1, QString mess2);
public:
    //发射信号的函数
    void emitSignal() {
        emit MySignal(message1, message2);
    }
    //普通类成员函数
    void recSlot1(QString mess) {
        qDebug() << "执行 recSlot1() 成员函数，输出" << mess;
    }
public slots:
    void recSlot2(QString mess1, QString mess2) {
        qDebug() << "执行 recSlot2() 槽函数，输出" << mess1 << " " << mess2;
    }
public:
    QString message1;
    QString message2;
};

void recSlot3()
{
    qDebug() << "执行 recSlot3() 全局函数";
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //创建主窗口
    MyWidget mywidget;
    mywidget.message1 = "C语言中文网";
    mywidget.message2 = "http://c.biancheng.net";
    //类成员函数作为槽函数
    QObject::connect(&mywidget, &MyWidget::MySignal, &mywidget, &MyWidget::recSlot1);
    //信号函数和槽函数相连接
    QObject::connect(&mywidget, &MyWidget::MySignal, &mywidget, &MyWidget::recSlot2);
    //全局函数作为槽函数
    QObject::connect(&mywidget, &MyWidget::MySignal, &recSlot3);
    mywidget.show();
    //发射signal信号
    mywidget.emitSignal();

    return a.exec();
}

//MyWidget类的定义应该放到.h文件中，本例中将其写到main.cpp中，程序最后需要添加#include "当前源文件名.moc"语句，否则无法通过编译。
#include "main.moc"
